مشخصات مقاله
-
2232
-
0.0
-
13604
-
0
-
0
برنامه نویسی اندروید در محیط اندروید استودیو
مقدمه ای بر برنامه سازی تحت موبایل برای سیستم عامل اندروید
سیستم عامل اندروید
Android یک سیستم عامل تحت موبایل و مبتنی بر هسته ی Linux است. پروژه ی توسعه و ارتقا اندروید AOSP یا پروژه ی کد باز اندروید نام دارد که شرکت Google آن را رهبری می کند.
سیستم عامل اندروید از چهار لایه تشکیل شده است، اما یک توسعه دهنده ی اندروید معمولا با دو لایه ی بالایی (Application و Application Framework) آن سروکار دارد.
معماری اندروید به شرح زیر می باشد:
- لایه ی Application – پروژه ی کد باز اندروید دربردارنده ی چندین اپلیکیشن پیش فرض همچون مرورگر وب، اپلیکیشن استفاده از دوربین (Camera)، اپلیکیشن پخش موسیقی Music، اپلیکیشن برقراری تماس Phone و غیره ... می باشد. در واقع تمامی برنامه هایی که کاربران از آن ها استفاده می کنند در این لایه نصب شده و در درسترس کاربر قرار می گیرند.
- لایه ی Application framework – یک API است که امکان برقراری تعامل سطح بالا از اپلیکیشن ها با سیستم اندروید را فراهم می آورد. این لایه عمده ی خدمات سطح بالا و مورد نیاز اپلیکیشن ها را در قالب کلاس های جاوا فراهم آورده و به برنامه نویس اجازه ی بهره گیری از این امکانات در توسعه ی اپلیکیشن را می دهد.
- لایه ی Libraries و runtime – کتابخانه هایی که انجام کارهای معمول نظیر نمایش و ارائه ی خروجی گرافیکی (rendering)، ذخیره ی داده ها، قابلیت وبگردی را به صورت آماده فراهم می آورند. این لایه همچنین Runtime اندروید و کتابخانه های اصلی که امکان اجرای اپلیکیشن ها را فراهم می آورد، شامل می شود.
- لایه ی هسته ی Linux – این لایه امکان ارتباط با سخت افزار را مهیا می سازد.
تاکنون ویرایش های متعددی از اندروید منتشر شده که در جدول زیر آن ها را مشاهده می کنید:
نحوه ی برنامه سازی برای سیستم عامل تحت موبایل اندروید
زبان برنامه نویسی که برای ساخت و توسعه ی اپلیکیشن اندروید بکار گرفته می شود، زبان شی گرا و همه منظوره ی Java است. به عبارت دیگر، برنامه نویس اندروید تمامی فایل های تنظیمات و منطق اپلیکیشن که برای یک برنامه ی کاربردی اندروید ضروری است را با زبان چند منظوره ی Java می نویسد.
Android development tooling (مجموعه ابزار ساخت و توسعه ی اپلیکیشن های اندروید) فایل هایی که توسط محیط کاری و برنامه نویس تولید شده را به اپلیکیشن اندروید تبدیل می کند. حال اگر برنامه نویس فرایند deployment را آغاز کند، کل اپلیکیشن اندروید به زبان ماشین ترجمه، کلاس های اپلیکیشن پوشه بندی و package شده (تحت یک namespace یا پوشه ی واحد سازمان دهی شده)، سپس برای اجرا تنظیم و آماده می شود (و در نهایت به اجرا در می آید).
(deployment فرایندی است که طی آن اپلیکیشن برای بهره برداری کاملا آماده می شود.)
SDK (مجموعه ابزار ساخت و توسعه ی اپلیکیشن اندروید) و Gradle (سیستم ترجمه و کامپایل کدها به زبان ماشین) ابزار لازم جهت ایجاد، کامپایل و package کردن (سازمان دهی یا دسته بندی کلاس ها تحت یک namespace واحد) اپلیکیشن های اندروید را بر عهده دارد. تیم توسعه دهندگان اندروید افزونه ی Gradle را جهت هدایت اپلیکیشن های اندروید به مرحله ی کامپایل فراهم می آورد که می توانید آن را از اینترنت دانلود کرده و بر روی محیط کاری Android Studio نصب نمایید.
SDK یا مجموعه ابزار ساخت و توسعه ی اپلیکیشن های اندروید، ابزار ADB (پل ارتباطی به دستگاه اندروید و اشکال زدایی اپلیکیشن) را نیز شامل می شود. ADB یک پل ارتباطی به دستگاه های واقعی و مجازی اندروید جهت مدیریت یا اشکال زدایی اپلیکیشن می باشد.
ADT/مجموعه ابزار ساخت و توسعه ی اپلیکیشن اندروید و محیط توسعه ی Android Studio
شرکت Google جهت توسعه و تست اپلیکیشن های اندروید، IDE یا محیط برنامه نویسی Android Studio را ارائه کرده و توصیه می کند. این محیط کاری خود از محیط برنامه نویسی IntelliJ برگرفته شده است.
در ADT ویرایشگرهای اختصاصی ویژه ی فایل های اندروید تعبیه شده. بیشتر فایل های تنظیمات اندروید مبتنی بر XML هستند. ویرایشگرهایی که از آن ها نام برده شد به شما امکان می دهند بین نسخه ی XML (حالت ویرایش) فایل و رابط کاربری ساخت یافته که امکان وارد کردن داده را مهیا می کند، راه گزینی (سویچ) نمایید.
پروسه ی تبدیل و ترجمه از کد برنامه به اپلیکیشن اندروید
مطالبی که در بخش حاضر مطالعه می کنید مربوط به فرایند کامپایل بوده و برای توسعه ی اپلیکیشن ضروری نمی باشد. در صورت تمایل می توانید از آن رد شوید.
کامپایلر Java فایل های حاوی کد و دستورات (source file) جاوا را به فایل های کلاس (class file) تبدیل می کند. در واقع SDK اندروید در خود ابزاری به نام dx دارد که فایل های Java را به یک فایل اجرایی با پسوند .dex (Dalvik Executable) تبدیل می کند. تمامی فایل های کلاس اپلیکیشن داخل این فایل اجرایی قرار داده می شوند. در طول پروسه ی تبدیل، اطلاعات تکراری و غیر ضروری موجود در فایل های کلاس حذف شده و به طور بهینه سازمان دهی می شوند. به طور مثال، اگر یک متغیر String همزمان در چندین فایل کلاس وجود داشته باشد، فایل .dex تنها یک اشاره گر (reference) به این String را در خود نگه می دارد.
با توجه به توضیح بالا، فایل های .dex بسیار کم حجم تر از فایل های کلاس متناظر هستند.
فایل .dex و محتویات یک پروژه ی اندروید (resource) همچون تصاویر و فایل های XML همگی به صورت پکیج داخل فایل .apk (فایل Android package) قرار داده می شوند. این عملیات را برنامه ای به نام aapt انجام می دهد.
فایل .apk خروجی، تمامی داده های لازم برای اجرای اپلیکیشن را شامل می شود. حال کافی است این فایل را به وسیله ی ابزار adb (پل ارتباطی مدیریت دستگاه اندروید و اشکال زدایی اپلیکیشن) بر روی دستگاه اندروید نصب (deploy) کرد.
از ویرایش 5.0 به بعد اندروید، ART به عنوان سیستم مدیریت اجرای برنامه برای تمامی اپلیکیشن های اندروید مورد استفاده قرار می گیرد. ART از Ahead Of Time compilation (ترجمه ی کل کد برنامه به زبان ماشین به صورت یکجا در ابتدای اجرای اپلیکیشن) بهره می گیرد. حین نصب یک اپلیکیشن بر روی دستگاه اندروید، کد آن اپلیکیشن به زبان ماشین ترجمه می شود. این امر سبب می شود کد پس از کامپایل با افزایش 30 درصدی حجم مواجه شود، اما در زمان راه اندازی برنامه سرعت اجرا را بالا می برد.
از آنجایی که کد اپلیکیشن تنها به هنگام اجرا و راه اندازی اولیه اپلیکیشن به زبان ماشین ترجمه می شود، مصرف باتری به مراتب کاهش می یابد.
ابزار dex2oat فایل .dex تولید شده را به فرمت ELF تبدیل می کند. این فایل کد dex، کد ترجمه شده به زبان ماشین که مستقیما توسط پردازنده اجرا می شود (native code) و meta-data (اطلاعاتی پیرامون اپلیکیشن) را شامل می شود. فایل با نگه داشتن کد .dex امکان استفاده از ابزار جاری را همچنان فراهم می آورد.
عملیات مدیریت حافظه (garbage collection) در ART بهینه سازی شده، از این جهت مدت زمانی که اپلیکیشن ممکن است به طور موقت کند شده یا متوقف شود، کاهش می یابد.
فروشگاه مجازی Google Play
شرکت گوگل سرویسی به نام Google Play را ارائه می دهد که این سرویس یک فروشگاه مجازی است و برنامه نویسان می توانند اپلیکیشن خود را در آن برای استفاده ی کاربران به صورت رایگان و پولی عرضه کنند. کاربران، اپلیکیشن Google Play را نصب کرده و به واسطه ی آن برنامه های کاربردی دلخواه خود را از سرویس Google play دانلود و نصب می کنند.
اپلیکیشن Google Play یک سرویس ویژه کاربران ارائه می دهد که آن ها را از آپدیت و نسخه ی جدید یک نرم افزار آگاه می سازد. برای مثال زمانی که توسعه دهنده یک نسخه ی جدید از اپلیکیشن خود را در فروشگاه بارگذاری می کند، این سرویس بلافاصله کاربران جاری خود را از آن آپدیت مطلع ساخته و این آپدیت را در اختیار آن ها قرار می دهد.
Google play همچنین کتابخانه ها و سرویس هایی را ویژه ی برنامه سازان اندروید ارائه می دهد. به عنوان مثال می توان به سرویسی اشاره کرد که امکان استفاده و نمایش Google Maps را مهیا می سازد. ارائه ی این سرویس ها از طریق Google Play این مزییت را دارد که ویرایش های قدیمی اندروید نیز می توانند از آن ها استفاده کنند. Google می تواند آن ها را بدون اینکه نیازی به بروز آوری کلی سیستم عامل اندروید باشد، بروز رسانی کند.
نصب محیط برنامه نویسی Android Studio
سیستم مورد نیاز برای نصب Android Studio
می توان بر روی یک سیستم سخت افزاری متوسط به راحتی برای سیستم عامل اندروید برنامه نویسی کرد. هر چند برای شرایط مطلوب، بهتر است محیط سخت افزاری مدرن با پردازنده ی 2.6 گیگاهرتز و رم 8 گیگابایت استفاده نمایید. هارد SSD نیز می تواند به شدت در اجرا و راه اندازی سریع برنامه شبیه ساز اندروید موثر باشد.
ابزار لازم برای نصب و استفاده از سیستم عامل Linux
SDK اندروید 32 بیتی است، به همین جهت بر روی یک سیستم لینوکس 64 بیتی، می بایست پکیج ia32-libs را نصب نمایید. در نسخه ی Ubuntu می توانید این کار را با اجرای دستور زیر انجام دهید
apt-get install ia32-libs
چنانچه از نسخه ی دیگر Linux استفاده می کنید، توصیه می شود توضیحات و مستندات ارائه شده همراه با آن نسخه را در خصوص دستور مربوط مطالعه نمایید.
دانلود Android Studio از اینترنت
می توانید Android Studio را از آدرس http://developer.android.com/sdk/index.html دانلود نمایید.
دانلود در دو نسخه عرضه می شود: 1. یک نسخه فقط SDK Tools را شامل می شود 2. دیگری کل پکیج های Android Studio Packages را دربر می گیرد. شما می بایست Android Studio Package را دانلود نمایید.
نصب محیط برنامه نویسی Android Studio
پروسه نصب بر روی سیستم عامل Windows آسان است، کافی است فایل اجرایی .exe را که از اینترنت دانلود کردید، اجرا نمایید. در سیستم عامل Max OSX کافی است Android Studio را با اشاره گر موس کشیده و در پوشه ی Applications جایگذاری نمایید.
در سیستم عامل Linux می بایست فایل ZIP دانلود شده را از حالت فشرده خارج ساخته و در مکان مناسب جایگذاری نمایید. به منظور راه اندازی پروسه ی نصب Android Studio، ابتدا به آدرس android-studio/bin/ داخل یک پنجره ی فرمان (terminal) پیمایش نموده و سپس دستور studio.sh را اجرا نمایید.
زمانی که پروسه ی نصب Android Studio را راه اندازی می کنید، این امکان در اختیار شما قرار می گیرد که تنظیمات مورد نیاز نسخه ی نصبی موجود را (برای مثال setting ویرایش قدیمی تر Android Studio که قبلا بر روی سیستم خود نصب کردید) به محیط جدید وارد نمایید.
باقی مراحل نصب را به صورت ویزاردی دنبال نمایید.
در آخرین صفحه ی نصب، بر روی دکمه ی Finish کلیک نمایید.
تمرین: شروع به کار با Android Studio
در این تمرین می توانید یک پروژه ی اندروید تعریف کرده، سپس دستگاه مجازی (VM) Android را بر روی آن راه اندازی نمایید.
ایجاد یک پروژه ی اندروید
جهت ساخت یک اپلیکیشن ساده ی اندروید، می توانید بر روی لینک Start a new Android Studio project کلیک نمایید و یا اگر قبلا یک پروژه ی اندروید ایجاد کردید، این مسیر را طی نمایید: File ▸New Project.
پروژه ی اندروید خود را با مقادیر زیر تنظیم نمایید (فیلدهای پنجره ی Create new project را با مقادیر زیر مقداردهی نمایید). محل ذخیره ی پروژه (مقدار فیلد project location) و اسم پکیج (فیلدpackage name ) از مقادیری که شما وارد می کنید، بر گرفته می شود. برای ویرایش اسم پکیج، کافی است بر روی لینک کوچک Edit کلیک نمایید.
اگر قبلا SDK را دانلود نکرده باشید، Android Studio به صورت خودکار SDK مورد نیاز را از اینترنت بارگیری می کند.
در پنجره ی Add an Activity to Mobile، قالب آماده ی Empty Activity را انتخاب نمایید.
در آخرین صفحه ی تنظیمات پروژه ی جدید، گزینه یBackwards Compatibility (قابلیت پشتیبانی از ویرایش های قبلی) را از حالت انتخاب خارج نمایید.
بررسی پروژه ی ایجاد شده
برنامه ی راهنما (wizard) اکنون یک پروژه ی Android برای شما ایجاد می کند. بد نیست ساختار و فایل های تولید شده ی پروژه را بررسی نمایید.
ایجاد یک دستگاه مجازی (AVD)
جهت ایجاد یک AVD، مسیر Tools ▸ Android ▸ AVD Managerرا طی نمایید. سپس بر دکمه ی Create Virtual Device… کلیک کنید.
تنظیمات دستگاه مجازی را مطابق تصویر زیر انتخاب و مقداردهی نمایید:
در صفحه ی بعدی، مقدار ستون API Level (کتابخانه های اندروید که بر روی دستگاه مجازی نصب می شوند) را بر روی 23 (بالاترین ورژن) تنظیم نمایید.
در پایان بر روی دکمه ی Finish کلیک کنید. با این کار دستگاه مجازی با تنظیمات سخت افزاری انتخابی ایجاد شده و در زیر لیست نمایش AVD های موجود به نمایش در می آید.
راه اندازی دستگاه مجازی (AVD)
AVD مورد نظر را از لیست انتخاب نموده و سپس دکمه ی Play را فشار دهید.
تست اپلیکیشن بر روی دستگاه مجازی (AVD)
جهت راه اندازی و تست اپلیکیشن خود بر روی محیط دستگاه مجازی، این مسیر را طی نمایید: Run ▸ Run 'app' . یک پنجره ی محاوره ای به نمایش در می آید که در آن می توانید دستگاه دلخواه خود برای میزبانی جهت نصب و اجرای اپلیکیشن (deploy) را انتخاب نمایید.
اپلیکیشن شما با گذشت چند ثانیه بر روی محیط شبیه ساز به اجرا در می آید.
SDK Manager
استفاده از Android SDK Manager
SDK Manager به شما این امکان را می دهد تا Package ها (پوشه هایی حاوی کتابخانه های اندروید) مورد نیاز یک ویرایش خاص از اندروید را نصب/حذف نمایید.
جهت دسترسی به SDK manager، این مسیر را نمایید: Tools ▸ Android ▸ SDK Manager و یا بر روی آیکون SDK Manager کلیک نمایید.
نصب نسخه ی مورد انتخاب سیستم عامل اندروید
در SDK Manager، نسخه ی دلخواه اندروید برای نصب را از نمای درختی انتخاب نموده و سپس دکمه ی Install را کیلک نمایید. همان طور که در تصویر زیر مشاهده می کنید، API 18 از کتابخانه های اندروید انتخاب شده و نصب می شود.
با کلیک بر روی دکمه ی OK پروسه ی نصب را آغاز نمایید.
در تب SDK Platforms، می توانید ورژن API یا کتابخانه های اندروید را برای نصب انتخاب نمایید. در تب SDK Tools نیز می توانید ابزار توسعه و ساخت اپلیکیشن را نصب نمایید.
نصب support library (کتابخانه ی پشتیبانی از API های جدید اپلیکیشن در نسخه های قدیمی تر آن)
Support Library این امکان را برای شما فراهم می آورد تا از قابلیت ها و امکانات ویرایش های بالاتر اندروید در نسخه های پایین تر آن استفاده نمایید. علاوه بر آن، این کتابخانه قابلیت هایی که به صورت جدا از Android عرضه می شود (unbundled)، همچون ابزارک (widget) RecycleView جهت نمایش بهینه ی لیست، را در اختیار شما قرار می دهد.
در حال حاضر ویرایش های متعددی از این کتابخانه وجود دارد: v4، v7 و v13. این کتابخانه ها هر یک برای ورژن های مربوطه قابل استفاده می باشند. به عنوان مثال، support library v7 برای دستگاه های اندروید که از کتابخانه های ورژن 7 (API 7) اندروید استفاده می کنند، قابل استفاده می باشد. لازم به ذکر است که نسخه های بالاتر support library برای عملکرد صحیح خود نیاز به ورژن های پایین تر دارند. به طور مثال، support library v7 برای عملکرد صحیح خود به کتابخانه ی v4 احتیاج دارد.
تست اپلیکیشن های اندروید بر روی محیط مجازی (ADV) یا دستگاه واقعی
محیط شبیه ساز اندروید (emulator) و دستگاه مجازی اندروید (ADV)
مجموعه ابزار اندروید (Android Tooling) در خود یک نرم افزار شبیه ساز (Android device emulator) دارد. این شبیه ساز AVD را اجرا می کند. AVD می تواند محیط و سخت افزار یک گوشی واقعی اندروید را شبیه سازی کند.
AVD ها این امکان را برای شما فراهم می کنند تا اپلیکیشن های اندروید خود را بر روی ورژن های مختلف اندروید با تنظیمات سخت افزاری مختلف تست کنید. حتی اگر هم یک دستگاه واقعی اندروید برای تست اپلیکیشن های خود دارید، لازم است نحوه ی کار با AVD ها را بیاموزید چرا که دستگاه های مجازی به شما اجازه می دهند برنامه ی کاربردی خود را بر روی ورژن های مختلف اندروید با تنظیمات سخت افزاری خاص اجرا و تست نمایید.
تنظیمات دلخواه دستگاه مجازی را می بایست در طول پروسه ی ایجاد AVD مشخص نمایید. این تنظیمات انتخاب کیفیت تصویر (resolution)، ورژن کتابخانه های اندروید (API version) و تراکم پیکسلی مد نظر را شامل می شود.
می توانید چندین AVD با تنظیمات مختلف تعریف نمایید و آن ها را همزمان اجرا کنید. این کار به شما اجازه می دهد به طور همزمان اپلیکیشن خود را بر روی چندین دستگاه با تنظیمات مختلف امتحان کنید.
اگر AVD را حین راه اندازی اولیه متوقف نمایید، دستگاه مجازی خراب می شود. راه اندازی اولیه در دستگاه های قدیمی کمی زمان می برد. در دستگاه های جدید فرایند راه اندازی اولیه معمولا 1 تا 3 دقیقه طول می کشد.
پس از اجرای کامل AVD، می توانید GUI را به وسیله ی موس کنترل نمایید. شبیه ساز همچنین با ارائه ی منویی در سمت راست محیط، به شما امکان می دهد تا به دکمه های گوشی دسترسی داشته باشید. سعی کنید در طول پروسه ی توسعه ی اپلیکیشن، AVD را متوقف نکنید. چنانچه در اپلیکیشن خود تغییراتی را اعمال نموده و هم اکنون می خواهید نسخه ی جدیدی از آن را تست نمایید، بهتر است اپلیکیشن خود مجددا بر روی AVD مستقر (deploy) کنید.
Debug certificate (شناسنامه ی تاریخ تولید و ثبت اپلیکیشن) و تاریخ ابطال آن (expiry date)
اپلیکیشن های اندروید می بایست قبل از نصب بر روی دستگاه، امضا شده و کلید منحصر بفردی به آن تخصیص داده شود. در واقع در طول پروسه ی توسعه ی برنامه، محیط کاری Eclipse اپلیکیشن شما را به صورت خودکار با یک certificate یا امضای دیجیتالی خاص به نام debug key نشانه گذاری می کند تا امکان کپی برداری از آن وجود نداشته باشد.
حال این امضای دیجیتالی که به برنامه ی کاربردی تخصیص داده می شود، حدودا تا 365 روز اعتبار دارد. زمانی که این تاریخ به پایان می رسد، اپلیکیشن یک خطای زمان کامپایل (build error) صادر کرده و به شما اعلان می کند که certificate یا امضای دیجیتالی تخصیص داده شده به اپلیکیشن منقضی شده و دیگر معتبر نیست.
به منظور رفع این مشکل، کافی است فایل debug.keystore را حذف نمایید. محل ذخیره ی فایلی های اپلیکیشن به صورت پیش فرض در سیستم عامل OS X و Linux در آدرس ~/.android/ و در سیستم عامل ویندوز XP در آدرس C:\Documents andSettings\[username]\.android\ و در Vista و 7 در آدرس C:\Users\[username]]\.android\ می باشد.
دفعه ی بعد که اپلیکیشن را کامپایل (build) می کنید، ابزار کامپایل پروژه یک keystore به همراه debug key جدید برای اپلیکیشن تولید کرده و به آن اختصاص می دهد (key store = جهت تایید اعتبار id توسعه دهندگان مورد استفاده قرار می گیرد).
Google AVD در مقایسه با Android AVD
در طول ایجاد یک AVD، این اختیار را دارید که بین Android device یا Google device یکی را انتخاب نمایید.
یک AVD Android اغلب برنامه هایی از پروژه ی کد باز اندروید (Android Open Source Project) را شامل می شود. این در حالی است که یک AVD ساخته شده با API های Google معمولا کدهای اضافی (کتابخانه ها یا توابع اضافی) از Google را دربرمی گیرد.
AVD هایی که برای API های گوگل ایجاد می کنید به شما امکان می دهند تا اپلیکیشن هایی را که از سرویس های Google Play (به عنوان مثال سرویس های موقعیت یابی مانند Google Maps API) استفاده می کنند، تست نمایید.
بهینه سازی و افزایش سرعت اجرا با انتخاب GPU رایانه ی میزبان (تنظیمات آیتم ی Emulated Performance)
در طول فرایند تنظیم و آماده سازی یک محیط شبیه ساز برای تست برنامه (emulator)، می توانید یکی از دو گزینه ی Snapshot یا Use Host GPU را انتخاب نمایید.
پنجره ی محاوره ای حاضر به شما اجازه می دهد هر دو گزینه را انتخاب نمایید. اما اگر هر دو گزینه را فعال نمایید، با خطا مواجه خواهید شد.
با انتخاب گزینه ی اول، هنگامی که شما برای دومین بار دستگاه را راه اندازی می کنید، می بینید که دستگاه مجازی با سرعت خارق العاده ای اجرا می شود. می دانید چرا؟ به این علت که به هنگام بستن دستگاه مجازی، AVD وضعیت و اطلاعات جاری خود را ذخیره می کند و طبیعتا با اجرای بعدی این وضعیت بلافاصله بازگردانده می شوند. چنانچه گزینه ی Use Host GPU را انتخاب نمایید، AVD مستقیما از کارت گرافیک سیستم میزبان برای پردازش و نمایش گرافیک بهره می گیرد که سرعت برنامه را در شبیه ساز به طور قابل توجهی بالا می برد.
افزایش سرعت با انتخاب Intel image system
می توانید یک AVD را با image system مبتنی بر معماری ARM CPU یا Intel CPI اجرا نمایید. دستگاه مجازی که از Intel image system بهره می گیرد، در اجرا بر روی سخت افزار Intel/AMD نسبت به system image مبتنی بر ARM بسیار سریع تر عمل می کند. در شرح علت آن باید گفت که شبیه ساز نیازی ندارد که دستورات پردازنده ی ARM را بر روی کامپیوتر شما به Intel/AMD ترجمه کند. حقیقت این است که image تهیه شده از ARM بیشتر با دستگاه های اندروید مطابقت دارد، اما لازمه ی این است که پردازنده شبیه سازی شود و این افت سرعت را در پی دارد. x86 بسیار سریع تر است چرا که سعی می کند با استفاده از مکانیزم های مربوطه ی AVD کد را به صورت native اجرا کند.
Intel image را می توان به راحتی توسط Android SDK Manager برای API مربوطه نصب کرد. در محیط برنامه نویسی Android Studio، به هنگام ایجاد دستگاه مجازی، این اتفاق به صورت خودکار رخ می دهد. می توان تنظمیات لازم را از طریق package details انجام داد.
لازم به ذکر است که intel image برای تمامی ورژن های مجموعه کتابخانه های اندروید (API Level) در دسترس نیست
لازم است برای ویندوز درایورهای بیشتری دانلود و نصب نمایید.
پس از دانلود، می توانید به فایل مورد نظر در محل قرار گیری فایل های نصبی اندروید در پوشه ی extras/intel دسترسی داشته باشید. برای نصب درایورها می بایست است فایل اجرایی .exe را کلیک نمایید. این مرحله ی اضافی برای سیستم عامل ویندوز ضروری است. صرفا دانلود درایور کافی نیست و باید آن را نصب نمایید.
پس از دانلود، می توانید یک AVD مبتنی بر شبیه ساز Intel ایجاد نمایید. شبیه ساز با سرعت چندان بیشتری راه اندازی نمی شود، اما سرعت اجرای خود اپلیکیشن بسیار سریع تر خواهد بود.
تست برنامه بر روی یک دستگاه واقعی اندروید
ابتدا در دستگاه اندروید خود به بخش setting مراجعه نموده و در آنجا قابلیت USB Debugging را فعال نمایید. برای این منظور مسیر رو به رو را طی کنید: ▸ USB-Debugging Settings ▸ Development Options.
شاید لازم باشد درایور مورد نیاز برای گوشی همراه خود را نیز نصب نمایید. برای سیستم عامل های Linux و Mac OX این درایور از پیش نصب شده و آماده (out of box) در اختیار شما قرار می گیرد، اما برای سیستم عامل Windows شما می بایست درایور مربوطه را خود نصب نمایید.
پایین ترین ورژن اندرویدی که اپلیکیشن شما بر روی آن قابلیت اجرا دارد و به اصطلاح پشتیبانی می کند، می بایست با نسخه ی اندرویدی که بر روی دستگاه شما نصب است، سازگاری و هم خوانی داشته باشد.
زمانی که چندین دستگاه به کامپیوتر متصل کرده اید، می توانید مشخص کنید کدام یک مورد استفاده قرار گیرد. چنانچه تنها یک دستگاه به کامپیوتر وصل است، اپلیکیشن به صورت خودکار بر روی دستگاه مربوطه مستقر و نصب (deploy) می شود.
کامپوننت های (اجزای تشکیل دهنده) نرم افزاری یک اپلیکیشن اندروید
اپلیکیشن اندروید
اپلیکیشن اندروید در حقیقت یک موجودیت واحد و قابل نصب است که می توان آن را راه اندازی نموده و مستقل از دیگر اپلیکیشن های اندورید مورد استفاده قرار داد. اجزای تشکیل دهنده یا به اصطلاح کامپوننت های نرم افزاری دو اپلیکیشن می توانند بر اساس یک آبجکت به نام Intent به یکدیگر وصل شوند. به تعبیر دیگر با استفاده از آبجکت Intent می توان عملیات یا task هایی تعریف کرده که بین چندین اپلیکیشن رفت و آمد دارند و اطلاعاتی را بین این دو منتقل می کنند.
اپلیکیشن های اندروید به طور کلی از کامپوننت های نرم افزاری، فایل های حاوی دستورات جاوا (source files) و فایل های محتوا (resource files) تشکیل می شوند. کامپوننت های نرم افزاری اندروید هر یک به همراه شرح چیستی و کاربرد آن در زیر عنوان شده اند:
-
کامپوننت Application: هر برنامه ی اندروید می تواند تنها یک کلاس Application داشته باشد که این کلاس قبل از دیگر کامپوننت های اندروید نمونه سازی می شود (یک نمونه یا آبجکت از این کلاس ساخته می شود). این جزء نرم افزاری همچنین آخرین کامپوننتی است که به هنگام خروج و بسته شدن برنامه، متوقف شده و چرخه ی حیات آن به اتمام می رسد.
اگر خودتان به صورت صریح یک آبجکت از این کلاس نسازید، اندروید خود به صورت خودکار یکی برای شما ایجاد می کند. - Activity: جز نرم افزاری که یک صفحه از اپلیکیشن را ارائه داده و کاربر با تعامل با آن فعل خاصی را انجام می دهد، برای مثال با یکی از مخاطبین تماس گرفته، از منظره ای عکس می گیرد، یک نقشه را بر روی نمایشگر گوشی خود مشاهده می کند یا ایمیلی را ارسال می کند. به هر activity یک پنجره اختصاص می یابد که در آن رابط کاربری و ظاهر برنامه (UI) ترسیم می گردد.به عبارت دیگر، Activity جز ء اصلی اپلیکیشن های اندروید است که از دو بخش تشکیل شده: 1. کلاس که کد و رفتار برنامه را در آن پیاده سازی می کنید 2. لایه ی گرافیکی. یک اپلیکیشن می تواند چندین activity داشته باشد. activity ها با استفاده از view ها و fragment ها ظاهر برنامه ی خود را ساخته و با کاربر تعامل برقرار می کنند.
- Service: یکی از اجزا تشکیل دهنده ی اپلیکیشن های اندروید که عملیاتی را انجام می دهد ولی رابط کاربری یا UI ندارد. به عبارت دیگر، یک کامپوننت نرم افزاری که در پس زمینه کار می کند و با کاربر هیچ تعاملی ندارد. سرویس ها می توانند با دیگر کامپوننت های اندروید ارتباط بر قرار کنند. به عنوان مثال broadcast receiver می تواند از طریق notification framework به کاربر درباره ی رخداد خاصی خبر بدهد.
-
4. Broadcast receiver: یک Broadcast receiver می تواند به پیغام ها سیستمی و intent ها گوش فرا دهد و به اصطلاح منتظر باشد اتفاق خاصی رخ دهد. در واقع زمانی که event مورد نظر رخ می دهد، receiver ای که به آن گوش فرا می دهد توسط سیستم اندروید مطلع می گردد.
به عنوان مثال می توانید یک receiver تخصیص دهید که کار آن گوش دادن به پیغام های سیستمی یا intent ها است. یا receiver ای اعلان کنید که منتظر تغییر در وضعیت گوشی (زمانی که گوشی زنگ می زند) است.
به عبارت دیگر سیستم اندروید رخدادهایی را که اتفاق می افتد توسط broadcast اعلان می کند و شما می توانید برای این رخدادها receiver تعریف کنید که به رخداد گوش داده و در زمان فعال شدن رخداد از آن مطلع شود.
شما می توانید ویژه ی event مربوط به اتمام فرایند راه اندازی سیستم (boot)، یک receiver تعریف نمایید. - 5. Content provider: یک جزء نرم افزاری که که رابط ساخت یافته یا یک پل ارتباطی به داده های اپلیکیشن فراهم می آورد. کامپوننت Content provider این قابلیت را دارد که داده های مورد نیاز چندین اپلیکیشن را در مکانی واحد به اشتراک گذاشته تا برنامه هایی که به این داده ها نیاز دارند بتوانند به آن داده ها دسترسی داشته و از آن ها استفاده کنند.
سیستم اندروید یک دیتابیس به نام SQLite دارد که به طور مکرر همراه با content provider مورد استفاده قرار می گیرد. دیتابیس داده ها را ذخیره می کند و سپس این داده ها توسط واسطی به نام provider در اختیار اپلیکیشن قرار می گیرد.
طراحی ظاهر و UI برنامه با استفاده از fragment ها، view ها و layout manager ها
Fragment ها کامپوننت هایی هستند که در بستر (context) یک activity که همان فرم در اندروید است، اجرا می شوند. fragment ها با کپسوله سازی کدهای اپلیکیشن در خود امکان استفاده ی مجدد از آن ها در activity های مختلف را فراهم آورده و همچنین توسعه دهنده را قادر می سازد برای دستگاه های اندروید با اندازه صفحه متفاوت UI داینامیک و انعطاف پذیر تعریف کنند.
تصویر زیر یک activity به نام MainActivity را به نمایش می گذارد. Activity حاضر، در نمایشگر کوچک، تنها یک fragment را برای کاربر نمایش می دهد. این در حالی است که همین activity، به هنگام نمایش در دستگاه تبلت هر دو fragment را همزمان در یک صفحه به نمایش می گذارد.
View ها ابزارک های رابط کاربری (UI Widget) همچون دکمه یا text field هستند که به وسیله ی attribute می توان رفتار و ظاهرشان را تنظیم و ویرایش کرد.
در اندروید مفهومی به نام ViewGroup وجود دارد. ViewGroup خود یک view است که نقش میزبان یا ظرف را برای دیگر view ها (که در اصطلاح view های فرزند آن خوانده می شوند) ایفا می کند. به این view میزبان در اندروید layout manager نیز گفته می شود چرا که قادر است چینش view های دیگر را مدیریت کند.
کلاس پایه که layout manger ها از آن ارث بری می کنند android.view.ViewGroup است . این کلاس خود از android.view.View که کلاس پدر تمامی view ها است مشتق می شود.
می توان با قرار دادن layout manager ها در دل یکدیگر (تودرتو کردن آن ها)، layout یا قالب های ترکیبی و پیچیده تری ایجاد کرد.
ابزارک های رابط کاربری یا widget های مورد استفاده در صفحه ی اصلی (home screen widget)
Widget ها یا ابزارک های رابط کاربری که در صفحه ی اصلی موبایل به نمایش در می آیند، در واقع یک سری broadcast receiver هستند که کامپوننت های تعاملی ارائه می دهند. شما از طریق این کامپوننت ها می توانید به بخش هایی از برنامه در صفحه ی اصلی موبایل (home screen) دسترسی داشته باشید. به عنوان مثال، یک ابزارک می تواند به کاربر اجازه دهد خلاصه ای از ایمیل های جدید را مشاهده کند و زمانی که کاربر بر روی ایمیل دلخواه خود کلیک کرد، کاربر را به صفحه ی مربوطه در اپلیکیشن هدایت کند.
Live wallpapers به شما این امکان را می دهند تا background های متحرک و پویا برای نمایش در صفحه ی اصلی سایت خود ایجاد کنید.
کلاس Context
نمونه یا آبجکت های ایجاد شده از کلاس android.content.Context ، اتصال/امکان دسترسی به سیستم اندروید و دستگاهی که اپلیکیشن بر روی آن اجرا می شود را فراهم می آورد. به عبارت بهتر، نمونه های این کلاس به سیستم، منابع و سرویس های اپلیکیشن دسترسی دارند.
برای مثال، می توانید به وسیله ی Context اندازه ی دقیق صفحه نمایش دستگاه جاری را بدست بیاورید.
Activity ها و سرویس ها از کلاس Context ارث بری می کنند.
فایل تنظیمات اندروید (manifest)
تنظیمات اپلیکیشن های اندروید
کامپوننت ها، تنظیمات و metadata یک اپلیکیشن اندروید در فایل AndroidManifest.xml آن که فایل تنظیمات در سیستم اندروید است، قید می شود.
تمامی activity ها، سرویس ها و کامپوننت های content provider اپلیکیشن باید در این فایل و به صورت static تعریف شوند. اما Broadcast receiver را می توان به صورت static در فایل manifest یا به صورت dynamic و در زمان اجرا در اپلیکیشن تعریف کرد. سیستم اندروید این فایل تنظیمات را به هنگام نصب اپلیکیشن خوانده و سپس با توجه به اطلاعات داخل آن، قابلیت ها و امکانات متعدد اپلیکیشن مورد نظر را شناسایی می کند.
Gradle، سیستم کامپایل و دسته بندی کلاس های اندروید تحت یک پوشه ی واحد (build&packaging)، می تواند فایل manifest را ایجاد کرده و در اختیار شما قرار دهد. برای مثال، ورژن اپلیکیشن معمولا توسط فایل gradle build عرضه می شود.
نمونه ای از فایل تنظیمات اندروید (manifest)
در زیر نمونه ای از یک فایل ساده ی تنظیمات اندروید (manifest) را مشاهده می کنید:
خصیصه ی Package و تعین نسخه های اپلیکیشن با استفاده از خصیصه های Version در فایل تنظیمات (manifest)
در فایل تنظیمات attribute یا خصیصه ای به نام package مشاهده می شود که اسم پکیجی که آبجکت ها (کلاس های) جاوا مورد اشاره در این فایل، داخل آن قرار دارند را مشخص می کند. در صورتی که یک آبجکت جاوا داخل پکیج دیگری قرار دارد، در آن صورت لازم است اسم کامل پکیج قید شود.
برای عرضه ی اپلیکیشن در فروشگاه مجازی Google play، آن اپلیکیشن باید یک اسم پکیج اختصاصی و منحصر بفرد داشته باشد. توصیه می شود برای اسم پکیج، اسم دامنه ی اپلیکیشن خود را به صورت وارونه بکار ببرید. بدین وسیله یک معرف یکتا برای اپلیکیشن اعلان می کنید که آن را از دیگر اپلیکیشن ها برای سیستم اندروید تمییز می دهد.
android:versionName و android:versionCode ورژن اپلیکیشن را مشخص می کنند. versionName اسم قابل مشاهده برای کاربرانی است که اپلیکیشن را بارگیری و نصب می کنند و هر می تواند هر مقدار رشته ای باشد.
مقدار versionCode باید یک عدد صحیح یا integer باشد. به وسیله ی این مقدار عددی Google play هم خود اپلیکیشن را شناسایی می کند و هم نسخه های جدید و آپدیت های آن را دنبال می کند. مقدار این خصیصه معمولا در اولین ورژن بر روی 1 تنظیم می شود و همین طور که ویرایش های جدید از آن منتشر می شود، این مقدار بالا می رود.
تگ (یک ظرف برای اجزا) و کامپوننت های دیگر
به شما این امکان را می دهد تا برای اپلیکیشن خود metadata بنویسید (اطلاعاتی را پیرامون برنامه ی خود ارائه دهید) و علاوه بر آن یک کلاس application به صورت صریح تعریف نمایید. این تگ همچنین می تواند ظرفی برای تعریف دیگر کامپوننت های اندروید باشد.
توسط تگ
بخش uses-sdk در فایل تنظیمات به شما این امکان را می دهد که پایین ترین نسخه و همچنین نسخه ی مورد نظر از اندروید که می خواهید اپلیکیشن بر روی آن قابل اجرا باشد را به ترتیب از طریق attribute های minSdkVersion و targetSdkVersion مشخص نمایید.
فایل تنظیمات اندروید (manifest) همچنین می بایست مجوزهای لازم را مشخص کند. به عنوان مثال، در صورتی که اپلیکیشن به اینترنت نیاز دارد، مجوز دسترسی به آن باید در این فایل تعریف و اعطا شود.
اپلیکیشن با استفاده از تگ
بخش uses-feature به شما این امکان را می دهد تا سیستم سخت افزاری که دستگاه میزبان اپلیکیشن باید داشته باشد را مشخص نمایید. به عنوان مثال، تکه کد زیر اعلان می کند که دستگاه مورد نظر باید برای اجرای اپلیکیشن و بهره وری از قابلیت های آن، دوربین داشته باشد.
به واسطه ی خصیصه ی installLocation می توانید مشخص کنید آیا اپلیکیشن شما اجازه یا امکان نصب بر روی حافظه ی خارجی دستگاه را دارد یا خیر. برای اعطای این مجوز کافی است attribute ذکر شده را با یکی از دو مقدار auto یا preferExternal برابر قرار دهید.
اندروید به شما اجازه می دهد فایل های محتوای پروژه ی خود را به صورت مجزا و جدا از کد برنامه (source code) در قالب منابع static (فایل های تنظیمات مبتنی بر XML ، عکس، متن و غیره ...) تعریف نمایید. به یک نمونه فایل resource می توان به values.xml در پوشه ی /res/values اشاره کرد. این فایل دربردارنده ی تعدادی ثابت رشته ای، آرایه ی از نوع رشته، ثابتی حاوی مقدار رنگ و ثابتی حاوی مقدار ابعاد می باشد.
سیستم build و کامپایل اندروید به تمامی فایل های محتوا و resource های مربوطه در پوشه ی res، یک ID منحصر بفرد تخصیص می دهد. اندروید سپس یک فایل به نام R.java ایجاد می کند که مقادیر این ID ها را در خود ذخیره می کند. ID ها (اشاره گرها) در واقع مقادیر static و عددی از نوع int هستند.
Activity ها (یا فرم ها در اندروید) ظاهر و UI خود را با استفاده از view ها (widget یا ابزارک های رابط کاربری) و fragment ها می سازند. در سیستم عامل اندروید کدهای مربوط به چیدمان المان های UI و طراحی رابط کاربری در قالب فایل های محتوا مبتنی بر XML در پوشه ی
فایل layout با فراخوانی متد setContentView به یک activity جهت نمایش در UI تخصیص می یابد، مانند زیر: محاسبه، پردازش و ترسیم view ها یک عملیات سنگین بوده و منابع و محتوای حجیمی را شامل می شود. شما بایستی تا حد امکان از layout های ساده استفاده نمایید تا سرعت اجرا و کارایی کلی برنامه بهبود یابد. برای مثال، بهتر است در شرایطی که یکmanager layout ساده کفایت می کند، از تودرتو سازی بیش از حد layout manager ها خودداری نمایید.
به منظور دسترسی به یک view از کد جاوا یا XML، لازم است با تنظیم مقدار attribute ای به نام android:id، به view دلخواه ID یا شناسه ی منحصر بفردی تخصیص دهید. جهت تخصیص یک ID جدید به view مورد نظر، کافی است خصیصه ی android:id از المان متناظر را در فایل layout با مقدار دلخواه تنظیم نمایید. توصیه می شود تمامی ID ها را در یک فایل تنظیمات (Config) واحد تعریف نمایید. این فایل معمولا ids.xml نام گذاری شده و در پوشه ی /res/values جایگذاری می شود. با این کار شما می توانید ID های از پیش تعریف شده را در فایل layout مورد استفاده قرار دهید. لازم به ذکر است که شما می توانید ID ها را در فایل جداگانه تعریف نمایید، اما در آن صورت بایستی آیتم @+id را از فایل های layout خود حذف نمایید چرا که در غیر این صورت با یک پیغام خطا مبنی بر اینکه این فایل ها قبلا ساخته شده اند مواجه می شوید. کد زیر نمونه ای از این فایل را به نمایش می گذارد. روشی که هم اکنون از آن نام برده شده برای پروژه های واقعی بسیار کارامد و مناسب می باشد. اما در آموزش حاضر، به علت زمان بر بودن این پروسه، مورد استفاده قرار نمی گیرد. سیستم اندروید خود نیز محتوا و resource ارائه می دهد. به این محتویات و منابع system resources گفته می شود. فایل های resource که خود سیستم در اختیار برنامه نویس قرار می دهد توسط پیشوند android از دیگر فایل های محتوا (local resource) متمایز می شوند. به عنوان مثال، android.R.string.cancel یک string است که محیط اندروید (platform) ویژه ی عملیات cancel تعریف می کند.
همان طور که می دانید یک اپلیکیشن اندروید دارای یک یا چند activity هست. Activity همان فرم یا پنجره در برنامه های تحت ویندوز است. حال داخل هر activity شما می توانید المان های رابط کاربری همچون دکمه، کادر متن و غیره داشته باشید. این اجزا رابط کاربری در واقع نمونه هایی از کلاس view یا subclass های (کلاس های ارث بری شده از) ViewGroup هستند.
Layout manager وظیفه ی تنظیم ظاهر خود و مدیریت چیدمان view های فرزندش را بر عهده دارد. در واقع Layout manager یک کلاس مشتق شده از ViewGroup است.
تمامی layout manager ها را می توان با ویرایش مقادیر attribute به آسانی طبق نیاز تنظیم کرد. View های موجود در layout manager می توانند attribute هایی داشته باشند و از طریق آن ها ظاهر خود همچون اندازه ی عرض و طول را مشخص کنند.
اندازه ی layout manager ها را می توان بر حسب واحد های اندازه گیری متعارف مشخص نمود یا مقادیر آماده و از پیش تعریف شده ی layout را مورد استفاده قرار داد. مثال: 100dp.
Constraint layout یکی از ابزار کنترل ظاهر و چیدمان المان های UI است که توسط کتابخانه ی خارجی در اختیار توسعه دهنده قرار می گیرد. این نوع layout به شما امکان استفاده از view hierarchy تخت و flat را می دهد که در افزایش سرعت اجرای اپلیکیشن بسیار موثر است. علاوه بر آن تمامی ابزارهای طراحی (design tool) به راحتی از constraint layout پشتیبانی می کنند. در پروژه های جدید بهتر است که از constraint layout برای طراحی ظاهر اپلیکیشن استفاده شود.
FrameLayout یک layout manager است که تمامی المان های داخل خود (child element) را بر روی هم ترسیم می کند. این به شما امکان می دهد جلوه های بصری و افکت های جالب طراحی کنید.
LinearLayout تمامی المان های داخل خود را، بر اساس مقدار خصیصه ی orientation، دورن یک ستون یا سطر واحد قرار می دهد. در واقع با استفاده از این layout المان های فرزند همگی پشت سرهم در یک مسیر قرار می گیرند. همان طور که گفته شد، این layout یک attribute به نام orientation دارد که می توان آن را با دو مقدار مختلف تنظیم کرد: vertical و horizontal. مقدار horizontal که المان مربوطه را به صورت افقی نمایش می دهد، حالت پیش فرض می باشد. در صورت تنظیم مقدار attribute بر روی vertical، المان های داخل layout manager به صورت زیر در نمایشگر نشان داده می شود:
LinearLayout را می توان در حالت nested و تودرتو بکار برد. به عبارت دیگر این امکان وجود دارد که با تعریف کردن چند layout داخل یکدیگر، قالب های پیچیده و جالب تر ایجاد نمود.
در این نوع layout، المان های رابط کاربری (widget) نسب به محل قرارگیری یکدیگر چیده می شوند. relativelayout را می توانید برای ساخت رابط های کاربری پیچیده مورد استفاده قرار دهید. در واقع RelativeLayout یک layout manager پیچیده و قدرتمند است که فقط باید در شرایط پیچیده مورد استفاده قرار گیرد زیرا این قالب برای چیدمان و تنظیم ظاهر المان های داخل خود به منابع زیاد و محاسبات سنگین احتیاج دارد.
GridLayout برای اولین بار در ویرایش 4.0 اندروید ارائه شد. layout نام برده به شما این امکان را می دهد تا فضای جاری را خانه بندی کنید و هر view می تواند یک یا چند خانه را اشغال کند. در واقع GridLayout قالب را مانند یک جدول به خانه، سطر و ستون تقسیم بندی می کند. این کد ظاهری مشابه آنچه در تصویر زیر مشاهده می کنید را تعریف می کند. گاهی لازم است تمامی view ها را در UI به نمایش بگذارید، حتی اگر فضای کافی برای نمایش آن ها وجود نداشته باشد. در صورتی که view بیش از حد بزرگ باشد، آنگاه ScrollView یک نوار پیمایش به صفحه اضافه نموده و به شما امکان می دهد به وسیله ی آن کل محتوا یا المان مورد نظر را (با کشیدن نوار به سمت چپ یا راست) در نمایشگر مشاهده نمایید. لازم به ذکر است که ScrollView یا HorizontalScrollView هیچ یک layout manager محسوب نمی شوند، بلکه خود می توانند یک view میزبان باشند و آن view تعدادی فرزند در خود داشته باشد. در زیر یک فایل XML مشاهده می کنید که در آن از ScrollView (جهت نمایش کل محتوای صفحه با نوار پیمایش) استفاده شده است. خصیصه ی "true" android:fillViewport=سبب می شود که ScrollView کل صفحه را در بر گیرد حتی اگر المان ها کوچکتر از کل صفحه باشند و اساسا نیازی به نوار پیمایش وجود نداشته باشد. در این تمرین شما تعدادی radio button به قالب (layout) اپلیکیشن که در تمرین قبلی ایجاد کردید، اضافه خواهید نمود. بسته به انتخابی که کاربر می کند، چیدمان دکمه از افقی به عمودی و بالعکس تغییر می کند.
فایل layout را باز نمایید و سپس یک radio group با دو radio button به قالب برنامه ی خود اضافه نمایید. در حال حاضر کد موجود در فایل XML می بایست به صورت زیر باشد. با کمی دقت متوجه می شود که تنها تگ RadioGroup در این layout جدید می باشد. کد فوق خروجی زیر را در UI به نمایش می گذارد:
تابع onCreate() را در کلاس activity ویرایش نمایید. سپس با فراخوانی متد findViewById() کلاس RadioGroup را در فایل layout (فایل xml که ظاهر برنامه را تعریف می کند) پیدا کنید. برنامه ی خود را اجرا نموده و انتخاب خود را تغییر دهید. بایستی بر اساس گزینه ی مورد انتخاب orientation دکمه ها تغییر کند.
کلاس Resources به شما اجازه می دهد به منابع و محتوای اپلیکیشن خود به صورت مجزا و فردی دسترسی داشته باشید. می توانید با فراخوانی متد getResources() از کلاس Context به راحتی به نمونه ی کلاس Resources دسترسی داشته باشید. از آنجایی که کلاس های activity و service همگی از (property ها و متدهای کلاس) Context ارث بری دارند، شما می توانید این متد را مستقیما در پیاده سازی های این کامپوننت ها بکار ببرید.
طبیعتا برای تنظیم ظاهر view ها، شما لازم دارید که در کد activity و fragment به آن ها دسترسی داشته و property های آن ها را ویرایش نمایید.
همچنین این امکان وجود دارد که به وسیله ی متد findViewById(id)، در یک view hierarchy (view های تودرتو در فایل layout) به آسانی view مد نظر را پیدا کرده و به آن دسترسی داشت.
در فایل های XML خود، برای مثال فایل های layout اپلیکیشن، می توانید به سایر resource ها اشاره کرده و در واقع از داخل فایل مورد نظر به آن ها دسترسی داشته باشید. این کار از طریق درج علامت @ صورت می پذیرد.
در سیستم اندروید، پوشه ای به نام res تعریف شده که دربردارنده ی مقادیر ساخت یافته و سازماندهی شده (با semantics و معانی از پیش تعریف شده) ویژه ی محیط کاری اندروید است. هر نوع داده ای را می توان در این پوشه ذخیره کرد. شما می توانید به فایل های ذخیره شده در پوشه، بر اساس محل قرارگیری آن فایل دسترسی داشته باشید. داخل این پوشه ی assets همچنین می توانید زیرپوشه داشته باشید. برای نگهداری داده هایی که با ساختار مشخصی سازمان دهی و ذخیره نشده اند (unstructured data)، می توانید از پوشه ی /res/raw استفاده نمایید. هر چند بهتر است این نوع اطلاعات را نیز در همان پوشه ی assets ذخیره نمایید (منابعی که در پوشه ی res ذخیره می شود برای کاربر قابل دسترسی هستند). در این تمرین نیز اپلیکیشن قبلی را ادامه می دهید. دو تصویر جدید ایجاد می کنید و آن را به پروژه ای به نام ic_tethering و ic_offline اضافه می نمایید. فایل layout خود را باز نموده و یک تگ Button و ImageView به آن اضافه نمایید. سپس فایل ic_offline را از طریق فایل layout به ImageView اضافه کنید. زمانی که بر روی دکمه کلیک می شود، با استفاده از متد findViewById() به ImageView دسترسی پیدا می کنید. سپس با استفاده از متد SetImageResource() فایل png را (که در زمان اجرای برنامه به صورت یک آبجکت Drawable نمایش داده می شود) به ImageView خود اضافه نمایید. پارامتر ارسال شده به متد SetImageResource() یک شناسه یا ID است که به فایل R.drawable.your_png_file اشاره دارد و شناسه ی متناظر فایل مورد نظر می باشد. برنامه را اجرا نمایید. حال بر روی دکمه کلیک کنید. در پی کلیک بر روی دکمه ی جدید، تصویری که در UI قابل مشاهده می باشد باید با تصویر دیگری جایگزین شود.
در این تمرین یک کلاس ScrollView به پروژه اضافه می کنید که یک نوار پیمایش به اپلیکیشن اضافه نموده و امکان مشاهده ی تمامی بخش های view را در صفحه ی نمایشگر برای کاربر فراهم می آورد. یک پروژه اندروید به نام de.vogella.android.scrollview ایجاد کرده و سپس کلاس activity با نام ScrollViewActivity را به آن اضافه نمایید. کد کلاس ScrollViewActivity را به صورت زیر ویرایش نمایید. اپلیکیشن خود را اجرا کنید. با توجه به کدی که برای برنامه نوشته اید، بایستی بتوانید با استفاده از نوار پیمایش به پایین صفحه دسترسی داشته و دکمه ها را مشاهده نمایید. اکنون می بایست با کلیک بر روی دکمه ی جدید، تصویر قابل مشاهده در نمایشگر را جایگزین نمایید.
در طی این تمرین شما نحوه ی ایجاد و استفاده از resource و محتوای اندروید را خواهید آموخت. یک پروژه ی جدید اندروید بر اساس پارامتر های ارائه شده در جدول زیر ایجاد نمایید. جهت ویرایش فایل res/values/strings.xml آن را انتخاب و سپس بر روی آن دابل کلیک نمایید. دو متغیر Color و String بر اساس جدول زیر اضافه نمایید. مقادیر می بایست به صورت زیر در فایل XML درج شود.
فایل res/layout/activity_main.xml را انتخاب نموده و با دوبار کلیک بر روی آن ویرایشگر متناظر را باز نمایید. اکنون بر روی تب XML فایل layout خود کلیک نمایید. آن را با کد زیر تطبیق داده و از مشابه بودن آن اطمینان حاصل نمایید. تیم توسعه دهندگان ابزار اندروید این کد را هر چند وقت یکبار تغییر می دهند، به همین خاطر اگر فایل XML شما کمی متفاوت بود، جای تعجب نیست. با تعدادی پیغام هشدار مواجه می شوید. این خطاها را در بخش بعدی تمرین برطرف خواهید نمود. نسخه ی XML فایل را باز نمایید و مقدار @string/Celsius را به property یا خصوصیت android:text از اولین radio button تخصیص دهید. سپس رشته ی farenhiet را به خصوصیت text از دومین radio button انتساب دهید.
مقدار خصوصیت Checked را بر روی true تنظیم نمایید و سپس مقدار onClick را به خوصیصت onClick اختصاص دهید.
تمامی کامپوننت های UI در یک layout با فرمت XML تعریف می شوند. رنگ پس زمینه (background color) را نیز در این فایل اضافه نمایید.
پس از افزودن این خط کد، پس زمینه بایستی با رنگ whitesmoke تنظیم شود.هر چند تشخیص این تغییر ممکن است با توجه به رنگ انتخابی کمی دشوار باشد. یک کلاس تعریف کرده و در آن کد لازم برای انجام عملیات تبدیل از واحد سلسیوس به فارانهایت و بالعکس را بنویسید. کد موجود در کلاس MainActivity را به صورت زیر ویرایش کنید: اپلیکیشن اندروید خود را راه اندازی نموده و یک عدد جهت تبدیل در آن وارد نمایید. سپس تبدیل را انتخاب نموده و دکمه ی مربوطه را کلیک نمایید. پس از مشاهده ی نتیجه گزینه ی اول، جهت اطمینان حاصل نمودن از عملکرد صحیح برنامه در تبدیل بالعکس، گزینه ی دیگر را انتخاب نمایید. روش های مختلفی برای نصب اپلیکیشن بر روی دستگاه وجود دارد. شما می توانید اپلیکیشن را از طریق USB و در حالت تست بر روی دستگاه مستقر نمایید یا آن را از طریق ایمیل به خود ارسال نموده و نصب کنید و یا اپلیکیشن را بر روی فروشگاه های مجازی عرضه ی اپلیکیشن های تحت موبایل اندروید بارگذاری نموده و از آنجا امکان دانلود و نصب آن را فراهم نمایید. در زیر روش های معمول و پرطرفدار عرضه و نصب اپلیکیشن تشریح شده اند. شما می توانید با تعریف تگ
اپلیکیشن های اندروید بایستی قبل از اینکه بر روی دستگاه نصب شوند، امضا شده و کلید یا امضای الکترونیکی منحصربفردی به آن اختصاص یابد. به هنگام ساخت و توسعه ی اپلیکیشن، پروسه ی کامپایل و build برنامه ی شما را با یک debug key (امضای الکترونیکی جهت دیباگ) امضا می کند. جهت خروجی دادن اپلیکیشن از داخل محیط Android Studio منوی اصلی را باز نموده و سپس مسیر روبرو را طی نمایید: Build ▸ Generate Signed APK.
جهت خروجی دادن اپلیکیشن از محیط کاری Eclipse، کافی است بر روی آن راست کلیک کرده و سپس این مسیر را طی نمایید: Android Tools ▸ Export Signed Application Package.
اندروید به شما اجازه می دهد تا اپلیکیشن را به طور مستقیم نصب نمایید. کافی است بر روی لینکی که در یک پیوست ایمیل یا صفحه ی وب به فایل .apk اشاره دارد، کلیک کنید. اندروید از شما می پرسد آیا مایلید اپلیکیشن را نصب نمایید یا خیر.
جهت عرضه ی اپلیکیشن های اندرویدی خود در Google play می بایست مبلغ 25 دلار را برای یکبار پرداخت کنید. پس از پرداخت این مبلغ می توانید برنامه های خود را به همراه آیکون های مربوطه تحت آدرس https://play.google.com/apps/publish مسقیما در Google Play بارگذاری نمایید.تعیین پایین/بالاترین نسخه ی اندروید که برنامه بر روی آن اجرا می شود (خصیصه های minSdkVersion و targetSdkVersion)
تعیین مجوزهای دسترسی با استفاده از تگ permission
در فایل تنظیمات (manifest) اندروید همچنین بخشی به نام uses-configuration وجود دارد که روش های دریافت ورودی برای دستگاه را مشخص می کند. برای مثال، تکه کد زیر اعلان می کند که دستگاه مورد نظر بایستی از صفحه کلید مجزا (به صورت سخت افزاری) برخوردار باشد.
تعیین محل نصب (خصیصه ی installLocation)
در حقیقت، این امکان به ندرت مورد استفاده قرار می گیرد چرا که اپلیکیشن (مسقر بر روی حافظه ی خارجی) به مجرد وصل شدن به کامپیوتر و استفاده از آن به عنوان یک حافظه ی USB، بلافاصله متوقف می شود.
فایل های محتوا (Resources)
فایل های محتوا بایستی داخل پوشه ی /res اپلیکیشن شما، در زیرپوشه ای از پیش تعریف شده جایگذاری شود. این زیرپوشه معمولا به نوع محتوایی که در آن قرار داده می شود، بستگی دارد. در صورت لزوم می توانید شناسه های بیشتری به اسم پوشه الصاق نموده و از این طریق مشخص نمایید محتوای مربوطه باید برای تنظیمات خاصی مورد استفاده قرار گیرد. این شناسه ها در اصطلاح resource qualifier خوانده می شوند. به عنوان مثال، می توانید مشخص کنید که فایلlayout یا تنظیم چیدمان های المان رابط کاربری فقط برای اندازه صفحه ی خاصی قابل استفاده می باشد.
جدول زیر توضیح مختصری در خصوص منابع (resource) مورد پشتیبانی و پیشوند مربوطه ی هر یک ارائه می دهد.
نمونه فایل resource (تعریف تعدادی ثابت رشته ای، آرایه ی رشته ای، ثابت رنگ و ابعاد)
فایل های resource و R.java
بلافاصله پس از ایجاد یک فایل resource جدید، ID متناظر با آن به صورت خودکار در فایل R.java ایجاد می شود. نیازی به تغییرات دستی در فایل R.java نیست و در صورت اعمال چنین تغییراتی هم، Android development tooling آن ها را بازنویسی می کند. سیستم اندروید تعدادی متد ارائه می دهد که ID مربوط به یک resource را به عنوان آرگومان پذیرفته و فایل resource متناظر آن را بازیابی می کند.
برای مثال، جهت دسترسی به یک String با ID منحصر بفرد R.string.yourString در کد برنامه، شما می بایست متد getString(R.string.yourString) از کلاس Context را فراخوانی نمایید.
فایل های Layout (فایل های چیدمان رابط کاربری)
/res/layout_ تعریف می شوند یا در قالب کد جاوا نوشته و ذخیره می گردند. در صورت تمایل می توانید تلفیقی از دو روش را بکار ببرید، هر چند روش اول بیشتر توصیه می شود. بدین وسیله می توان منطق برنامه (programming logic) را از ظاهر آن (layout definition) جدا کرد. همچنین این امکان بوجود می آید که برای هر دستگاه ظاهر و فایل layout ویژه ای تعریف نمایید.
فایل محتوا (resource file) که کدهای UI برنامه از آن خوانده می شوند در اصطلاح برنامه نویسی اندروید layout گفته می شود. Layout یا فایل تنظیم چیدمان المان های رابط کاربری تمامی view ها، ViewGroup ها و رابطه میان آن ها و attribute های آن ها را در قالب فایل های XML تعریف می کنند.
کد زیر یک نمونه ساده از فایل layout را به نمایش می گذارد.
package com.vogella.android.first;
import android.os.Bundle;
import android.app.Activity;
import android.view.Menu;
public class MainActivity extends Activity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
}
}
افزایش سرعت و کارایی با استفاده از layout های ساده
رهنمودها و روش های بهینه در خصوص ID های اختصاص داده شده به فایل های محتوا/resource
SDK یا مجموعه ابزار ساخت توسعه برنامه های اندرویدی، از سیستم نشانه گذاری camelCase برای نگارش مقدار ID بهره می گیرد. مثال: buttonRefresh. توصیه می شود شما نیز از همین سیستم استفاده نمایید.
در نمونه ی زیر می بینید که با تنظیم مقدار attribute نام برده (خصیصه ی android:id المان مربوطه) بر روی پارامتر رشته ای "@+id/button1"، به المان دکمه یک شناسه ی منحصر بفرد اختصاص داده می شود. طبق قراردادهای تعریف شده، این دستور یک ID جدید در فایل R.java ایجاد کرده و سپس آن را به view مربوطه انتساب می دهد.
محتوای و منابعی که توسط سیستم اندروید ارائه می شود (system resources)
مفهوم view در اندروید – المان ها و ابزارک های رابط کاربری یا UI Widget
به عبارت دیگر view کلاس پدر (superclass) است که تمامی کامپوننت های GUI در اندروید از آن ارث بری می شوند. به عنوان مثال، کلاس TextView که یک برچسب متنی را در UI به نمایش می گذارد یک کلاس فرزند از View است (ViewGroup نیز یک کلاس مشتق شده از View است. از خود ViewGroup آبجکت هایی ساخته می شود که این آبجکت ها نقش ظرف را برای گروه بندی نمونه های کلاس View ایفا می کند. به عنوان مثال می توان به کلاس LinearLayout اشاره کرد که یک کلاس فرزند از ViewGroup است.)
هر view در اندروید نماینده ی یک widget (ابزارک یا المان کاربری) همچون دکمه یا یک layout manager هست. SDK سیستم اندروید این ابزارک یا المان های رابط کاربری را از طریق کلاس Button، TextView و EditText در اختیار شما قرار می دهد (ListView که لیستی از آیتم ها را در نمایشگر به صورت فهرست ارائه می دهد) .
تمامی view ها از کلاس android.view.View ارث برده می شوند. این کلاس پدر، بسیار سنگین و حاوی حدودا 18 هزار خط کد است که قابلیت های پایه ای مختلفی را در اختیار کلاس های فرزند خود قرار می دهد.
کلاس های پایه ی view ها همگی در پوشه ی android.view قرار دارند و widget های پیش فرض محیط اندروید (platform) داخل پوشه ی android.widget.
مقادیر Border-style
استفاده از layout manager
Layout manager های متعددی در سیستم اندروید تعبیه شده که در زیر به پرکاربردین آن ها اشاره می شود:
تنظیم و ویرایش layout manager ها از طریق attribute ها
View های موجود در layout manager می توانند طول و عرض مد نظر خود را به واسطه ی attribute های زیر تنظیم کنند.
مقدار match_parent به اپلیکیشن دستور می دهد widget موجود در layout manager (یا view پدر) را دقیقا از لحاظ اندازه با view پدر (میزبان) برابر قرار دهد. در مقابل این پارامتر، مقدار wrap_content وجود دارد که به layout اعلان می کند تنها به میزان مورد نیاز به widget فضا تخصیص دهد. در تصویر زیر اثر هر دو پارامتر به نمایش گذاشته شده است.
Constraint Layout
در واقع با constraint layout می توان قالب های انعطاف پذیر، واکنشگرا و پیچیده (تودرتو) تعریف کرد که علاوه بر قابلیت تطبیق خودکار خود با نمایشگرهای مختلف و تغییر جهت نمایش یا وضعیت چیدمان، می تواند سرعت بالایی داشته باشد.
FrameLayout
تصویر زیر اپلیکیشن Gmail را به نمایش می گذارد که با استفاده از FrameLayout چندین دکمه را بر روی layout دیگر قرار می دهد. در این layout المان ها می توانند بر روی یکدیگر قرار گیرند.
LinearLayout
در صورت مقداردهی attribute نام برده با horizontal، المان های داخل layout manager به صورت زیر در نمایش گر ارائه می شوند.
در LinearLayout شما می توانید اندازه ی هر یک از المان های حاضر در layout manager را با مقداردهی خصیصه ی android:layout_weight تنظیم نمایید. این مقدار مشخص می کند چه میزان از فضای اضافی موجود به هر یک از المان ها اختصاص داده شود. برای مثال، چنانچه در قالب خود دو widget داشته باشید و خصیصه ی layout_weight یکی را با 1 و دیگری را با 2 مقداردهی کنید، در آن صورت اولین المان 3/1 فضای موجود را می گیرد و دومین المان 3/2 فضا را به خود اختصاص می دهد. همچنین می توانید با قرار دادن مقدار layout_width بر روی 0 یک نسبت مشخص را رعایت کنید.
Inflate کردن: تبدیل فایل LAYOUT XML به کلاس view جهت قرار گرفتن در کلاس ACTIVITY.
RelativeLayout
یکی از موارد استفاده ی RelativeLayout زمانی است که می خواهید فقط یک کامپوننت را در مرکز صفحه قرار دهید. برای این منظور کافی است یک کامپوننت به RelativeLayout اضافه نموده و مقدار خصیصه ی android:layout_centerInParent را بر روی true تنظیم کنید.
GridLayout
به وسیله ی این layout manager شما می توانید دقیقا تعیین کنید هر View چند ستون را به خود تخصیص دهد، در کدام سطر و ستون قرار گیرد و در نهایت چند سطر و ستون را اشغال کند. اگر خودتان به صورت صریح مشخص نکنید، در آن صورت GridLayout مقادیر پیش فرض را تخصیص می دهد. برای مثال، به هر view یک ستون و یک سطر اختصاص می یابد و محل view نیز به ترتیبی که در کد تعریف کردید مشخص می شود.
فایل XML زیر یک قالب با GridLayout تعریف می کند.
ScrollView
تمرین: ویرایش view layout (تنظیم چیدمان المان های رابط کاربری) در زمان اجرا
افزودن radio group و radio button به قالب/layout
شناسه ی المان ها را بر اساس جدول زیر مقداردهی کنید.
ویرایش orientation/وضعیت چیدمان radio group در زمان اجرا (به صورت dynamic)
یک Linstener داخل radio group پیاده سازی نمایید که به تغییرات گوش فرا داده و وضعیت چیدمان یا orientation دکمه را بر اساس انتخاب جاری کاربر تغییر دهد. اینکه کدام دکمه انتخاب شده را می توان توسط پارامتر ID تشخیص داد.
RadioGroup را در قالب متغیر در کلاس activity خود اعلان نمایید. سپس RadioGroup.OnCheckedChangeListener را به واسطه ی متد setOnCheckedChangeListener() از پکیج android.widget.RadioGroup اضافه نمایید. این متد (listener) متنظر انتخاب کاربر می ماند و به محض رخداد اتفاق مورد نظر (تغییر انتخاب کاربر) از آن مطلع شده و متعاقبا دستورات پیاده سازی شده در onCheckedChanged را اجرا می کند.
می توانید از قالب آماده ی زیر به عنوان الگو جهت پیاده سازی listener استفاده نمایید.
final RadioGroup group1 = (RadioGroup) findViewById(R.id.orientation);
group1.setOnCheckedChangeListener(new RadioGroup.OnCheckedChangeListener() {
@Override
public void onCheckedChanged(RadioGroup group, int checkedId) {
switch (checkedId) {
case R.id.horizontal:
group.setOrientation(LinearLayout.HORIZONTAL);
break;
case R.id.vertical:
group.setOrientation(LinearLayout.VERTICAL);
break;
}
}
});
تست اپلیکیشن
دسترسی به محتوای static و استفاده از آن
دسترسی به فایل های محتوا (resources) از طریق کلاس Resources
سایر کلاس های framework اندروید نیز به نمونه ای از کلاس Resources احتیاج دارند. برای مثال، کد زیر برای شما نمایش می دهد چگونه یک فایل Bitmap از ID اشاره گر ایجاد نمایید.
// BitmapFactory requires an instance of the Resource class
BitmapFactory.decodeResource(getResources(), R.drawable.ic_action_search);
دسترسی به view ها از layout در کلاس activity
جهت دسترسی به view مورد نظر از layout جاری، کافی است متد findViewById(id) را فراخوانی نمایید. پارامتر ورودی id در واقع اشاره به خصیصه ی ID از view مورد نظر در فایل layout دارد. کد زیر کاربرد این متد را به نمایش می گذارد.
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
TextView textView = (TextView) findViewById(R.id.mytext);
// TODO do something with the TextView
}
همچنین می توانید یک متد کمکی (utility method) تعریف کنید و به وسیله ی آن آسان تر به view دلخواه دسترسی داشته باشید.
package com.example.android.test;
import android.app.Activity;
import android.view.View;
public class UiUtils {
public static
دسترسی به محتوای مورد نظر در فایل های XML از دیگر فایل های resource
برای مثال، جهت دسترسی به مقدار color که در یک فایل XML (resource file) تعریف شده، کافی است این ساختار نگارشی را بکار ببرید: @color/your_id. همچنین ممکن است قبلا یک String با ID یا شناسه ی "titlepage" در فایل XML تعریف کرده باشید و اکنون می خواهید به آن دسترسی داشته باشید. می توانید با دستور @string/titlepage به راحتی به آن متغیر دسترسی داشته باشید.
به منظور دسترسی به محتوایی که خود سیستم اندروید ارائه می دهد (system resource)، لازم است namespace یا پوشه ی android را در اشاره گرها (id هایی که برای دسترسی به آن منبع مورد استفاده قرار می دهید) لحاظ نمایید (مثال: android.R.string.cancel).
استفاده از پوشه ی assets و دسترسی به داده های ذخیره شده در آن
می توانید با فراخوانی متد getAssets() که نمونه ای از کلاس AssetManager را برمی گرداند، به فایل های خام ذخیره شده در پوشه ی/res/raw دسترسی داشته باشید. این متد از کلاس انتزاعی Context برگرفته شده است.
در زیر یک آبجکت از کلاس AssetsManager ایجاد می کنید که این کلاس اجازه ی دسترسی به فایل های خام مستقر در پوشه ی assets را می دهد. اسم این آبجکت را manager انتخاب می کنید. سپس با فراخوانی متد getAssets() نمونه ای از کلاس AssetsManager را برمی گردانید. از کلاس InputStream یک آبجکت به نام open ایجاد می کنید. سپس متد open() را بر روی آبجکت ایجاد شده از کلاس InputStream فراخوانی می کنید و اسم فایل مورد نظر را به عنوان پارامتر ورودی به متد open() پاس می دهید. این متد فایل را می خواند و در آبجکت open از کلاس InputStream می ریزد.
// get the AssetManager
AssetManager manager = getAssets();
// read the "logo.png" bitmap from the assets folder
InputStream open = null;
try {
open = manager.open("logo.png");
Bitmap bitmap = BitmapFactory.decodeStream(open);
// assign the bitmap to an ImageView in this layout
ImageView view = (ImageView) findViewById(R.id.imageView1);
view.setImageBitmap(bitmap);
} catch (IOException e) {
e.printStackTrace();
} finally {
if (open != null) {
try {
open.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
تمرین: استفاده از محتوا/resource در فایل های XML و در کد
افزودن عکس به اپلیکیشن
افزودن view جدید به پروژه
جایگزین کردن عکس ها با کلیک بر روی دکمه
تست اپلیکیشن
تمرین: استفاده از ScrollView در پروژه
activity_main.xml را به عنوان فایلی که اپلیکیشن ظاهر برنامه را بر اساس آن طراحی می کند (layout)، انتخاب نمایید.
فایل layout مزبور را که در activity خود فراخوانی می کنید، به صورت زیر ویرایش نمایید:
package de.vogella.android.scrollview;
import android.app.Activity;
import android.os.Bundle;
import android.view.View;
import android.widget.TextView;
public class ScrollViewActivity extends Activity {
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
TextView view = (TextView) findViewById(R.id.TextView02);
String s="";
for (int i=0; i < 500; i++) {
s += "vogella.com ";
}
view.setText(s);
}
}
تست اپلیکیشن
تمرین: نوشتن برنامه ی تبدیل دما
این اپلیکیشن از قبل نوشته شده و به صورت آماده در آدرس http://play.google.com/store/apps/details?id=de.vogella.android.temperature از طریق Google Play قابل دسترسی می باشد.
می توانید با گوشی اندروید خود بارکد زیر را اسکن کرده، سپس برنامه ی تبدیل دما را از طریق اپلیکیشن Google Play دانلود و نصب نمایید.
ساخت پروژه
ایجاد attribute ها
ایجاد فایل Layout و تنظیم کننده ی ظاهر اپلیکیشن
تمامی view ها را از layout حذف نمایید. این کار را می توانید یا به طور مستقیم از طریق فایل XML و یا به وسیله ی ویرایشگر گرافیکی انجام دهید.
سپس یک LinearLayout اضافه نموده و بعد از آن یک LinearLayout دیگر با ViewText و EditText به عنوان فرزند در داخل آن تعریف کنید.
پس از آن یک RadioGroup به همراه دو radio button به layout خود اضافه نمایید. این کار را می توانید یا از طریق فایل XML و یا ویرایشگر گرافیکی انجام دهید. یک روش ساده برای سازمان دهی کامپوننت ها این است که آن ها را با اشاره گر موس کشیده و بر روی Component Tree view جایگذاری نمایید.
خروجی می بایست به صورت زیر باشد.
ویرایش مقادیر property های view
مقدار @string/calc را به خصوصیت text اولین دکمه اختصاص داده، سپس مقدار onClick را به خصوصیت onClick انت
ساب دهید.
خوصیصت inputType را در EditText با numberSigned و numberDecimal مقداردهی نمایید. این اصلاحات در فایل XML زیر قابل مشاهده می باشد. در پایان ID آن را به "InputValue" تغییر دهید.
Color را انتخاب نموده و سپس myColor را در کادر محاوره ای انتخاب نمایید. رنگ پس زمینه ی UI در فایل XML به صورت زیر در آخرین خط تنظیم می شود.
حال بر روی تب activity_main.xml کلیک نموده و با بررسی آن از صحیح بودن کامل کد اطمینان حاصل نمایید.
تعریف یک کلاس کمکی (utility class)
package com.vogella.android.temperatureconverter;
public class ConverterUtil {
// converts to celsius
public static float convertFahrenheitToCelsius(float fahrenheit) {
return ((fahrenheit - 32) * 5 / 9);
}
// converts to fahrenheit
public static float convertCelsiusToFahrenheit(float celsius) {
return ((celsius * 9) / 5) + 32;
}
}
ویرایش کد activity
package com.vogella.android.temperatureconverter;
import android.app.Activity;
import android.os.Bundle;
import android.view.View;
import android.widget.EditText;
import android.widget.RadioButton;
import android.widget.Toast;
public class MainActivity extends Activity {
private EditText text;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
text = (EditText) findViewById(R.id.inputValue);
}
// this method is called at button click because we assigned the name to the
// "OnClick" property of the button
public void onClick(View view) {
switch (view.getId()) {
case R.id.button1:
RadioButton celsiusButton = (RadioButton) findViewById(R.id.radio0);
RadioButton fahrenheitButton = (RadioButton) findViewById(R.id.radio1);
if (text.getText().length() == 0) {
Toast.makeText(this, "Please enter a valid number",
Toast.LENGTH_LONG).show();
return;
}
float inputValue = Float.parseFloat(text.getText().toString());
if (celsiusButton.isChecked()) {
text.setText(String .valueOf(ConverterUtil.convertFahrenheitToCelsius(inputValue)));
celsiusButton.setChecked(false);
fahrenheitButton.setChecked(true);
} else {
text.setText(String .valueOf(ConverterUtil.convertCelsiusToFahrenheit(inputValue)));
fahrenheitButton.setChecked(false);
celsiusButton.setChecked(true);
}
break;
}
}
}
راه اندازی اپلیکیشن
فرایند آماده سازی، عرضه، توزیع و نصب اپلیکیشن (Deployment)
نحوه ی آماده سازی و عرضه ی اپلیکیشن برای نصب
مشخص کردن اجزا نرم افزاری و سیستم سخت افزاری مورد نیاز برای اپلیکیشن
Sign کردن (تخصیص امضای الکترونیکی جهت دیباگ) اپلیکیشن قبل از انتشار و عرضه ی آن در فروشگاه های مجازی
جهت نصب اپلیکیشن اندروید، شما می بایست فایل apk اندروید را با یک کلید منحصر بفرد (signature key) که به صورت خودکار تولید می شود، امضا نمایید.
لازم به ذکر است که برای بروز رسانی اپلیکیشن خود، می بایست از همان signature keyدر فروشگاه مجازی Google Play استفاده نمایید. اگر این کلید منحصربفرد را از دست بدید، دیگر هیچ وقت نمی توانید برنامه ی خود را بروز رسانی کنید. توصیه می شود از این کلید نسخه ی پشتیبان تهیه نمایید.
خروجی امضا شده دادن (Export) اپلیکیشن از طریق محیط کاری Android Studio
خروجی امضا شده دادن/Export اپلیکیشن از طریق محیط برنامه نویسی (IDE) Eclipse
ویزارد به شما اجازه می دهد یک کلید جدید ایجاد کنید یا همان کلید از پیش آماده را مورد استفاده قرار دهید.
نصب اپلیکیشن از روش های دیگر
البته برای این منظور می بایست به بخش تنظیمات دستگاه مراجعه نموده و اجازه ی نصب اپلیکیشن هایی که خارج از فروشگاه های مجازی معتبر عرضه می شود را به طور صریح اعطا نمایید. می توانید به گزینه ی مورد نظر در بخش Security تنظیمات دستگاه خود دسترسی داشته باشید.
فروشگاه مجازی Google Play
گوگل ابتدا برنامه را اسکن کرده و از عدم وجود بدافزار در آن اطمینان حاصل می کند. معمولا چند دقیقه پس از بارگذاری، اپلیکیشن برای دانلود و نصب در دسترس قرار می گیرد.